8.6 指定行、列方向数据可互转
df.melt()函数是将指定列数据转换到行方向,如果要做相反操作,则可用df.pivot()
此函数可以将行方向的数据调整到列方向显示,转换结果类似数据透视表,不过此函数不支持数据聚合,结构如下:
df.pivot(index=None,colunms=None,values=None)
index :指定用于创建DataFrame表格行索引的列
columns :指定用于创建DataFrame表格列索引的列,
values :用于填充新DataFrame表格值的列,如果未指定,则将使用所有剩余列,如果将是分层索引。
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" )
print (df)
t=df.pivot(
index = "姓名" ,
columns = "科目"
)
print (t)
返回:
姓名 | 科目 | 分数 | |
---|---|---|---|
0 | 李四 | 数学 | 71 |
1 | 李四 | 语文 | 70 |
2 | 李四 | 英语 | 70 |
3 | 王麻子 | 数学 | 72 |
4 | 王麻子 | 语文 | 82 |
5 | 王麻子 | 英语 | 61 |
6 | 张三 | 数学 | 86 |
7 | 张三 | 语文 | 82 |
8 | 张三 | 英语 | 91 |
分数 | |||
---|---|---|---|
科目 | 数学 | 英语 | 语文 |
姓名 | |||
张三 | 86 | 91 | 82 |
李四 | 71 | 70 | 70 |
王麻子 | 72 | 61 | 82 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" , 1 )
print (df)
t=df.pivot(
index = "姓名" ,
columns =[ "年份","半年" ],
values = [ "数量1", "数量2" ]
)
print (t)
返回:
姓名 | 年份 | 半年 | 数量1 | 数量2 | |
---|---|---|---|---|---|
0 | 张三 | 2018年 | 上半年 | 160 | 112 |
1 | 张三 | 2018年 | 下半年 | 121 | 101 |
2 | 张三 | 2019年 | 上半年 | 156 | 189 |
3 | 张三 | 2019年 | 下半年 | 141 | 124 |
4 | 李四 | 2018年 | 上半年 | 170 | 129 |
5 | 李四 | 2018年 | 下半年 | 163 | 144 |
6 | 李四 | 2019年 | 上半年 | 178 | 197 |
7 | 李四 | 2019年 | 下半年 | 105 | 142 |
8 | 五麻子 | 2018年 | 上半年 | 122 | 174 |
9 | 五麻子 | 2018年 | 下半年 | 195 | 151 |
10 | 五麻子 | 2019年 | 上半年 | 131 | 185 |
11 | 五麻子 | 2019年 | 下半年 | 125 | 170 |
数量1 | 数量2 | |||||||
---|---|---|---|---|---|---|---|---|
年份 | 2018年 | 2019年 | 2018年 | 2019年 | ||||
半年 | 上半年 | 下半年 | 上半年 | 下半年 | 上半年 | 下半年 | 上半年 | 下半年 |
姓名 | ||||||||
五麻子 | 122 | 195 | 131 | 125 | 174 | 151 | 185 | 170 |
张三 | 160 | 121 | 156 | 141 | 112 | 101 | 189 | 124 |
李四 | 170 | 163 | 178 | 105 | 129 | 144 | 197 | 142 |
import pandas as pd
df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.06 指定行、列方向数据可互转.xlsx" , 2 )
print (df)
t=df.pivot_table(
index = "日期" ,
columns =[ "产品" ],
aggfunc ={ "金额":"sum" }
)
print (t)
#如第0、1行数据有重复,所以不能用pivot了,只能用数据透视pivot_table了
日期 | 产品 | 金额 | |
---|---|---|---|
0 | 2024-04-01 | A | 87 |
1 | 2024-04-01 | A | 100 |
2 | 2024-04-01 | B | 60 |
3 | 2024-04-02 | A | 85 |
4 | 2024-04-02 | B | 82 |
5 | 2024-04-02 | B | 76 |
6 | 2024-04-02 | A | 62 |
7 | 2024-04-03 | A | 64 |
8 | 2024-04-03 | C | 64 |
金额 | |||
---|---|---|---|
产品 | A | B | C |
日期 | |||
2024-04-01 | 187.0 | 60.0 | NaN |
2024-04-02 | 147.0 | 158.0 | NaN |
2024-04-03 | 64.0 | NaN | 64.0 |